home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / music / cthugha5.zip / CTHU5SRC.ZIP / AUDIOGUS.C < prev    next >
C/C++ Source or Header  |  1994-08-19  |  4KB  |  230 lines

  1. //
  2. // Cthugha - Audio Seeded Image Processing
  3. //
  4. // Zaph, Digital Aasvogel Group, Torps Productions 1993-1994
  5. //
  6. // Ultrasound version by Jochen Quante 1994
  7. //                    modified by Daniel Sachs 1994
  8. //
  9.  
  10. #include <stdio.h>
  11. #include <dos.h>
  12. #include <io.h>
  13. #include <fcntl.h>
  14. #include <stdlib.h>
  15. #include <math.h>
  16. #include <conio.h>
  17.  
  18. //#ifdef _MSC_VER
  19. #include <assert.h>
  20. //#endif
  21.  
  22. #include "forte.h"
  23. #include "gf1proto.h"
  24. #include "ultraerr.h"
  25.  
  26. #include "cthugha.h"
  27. #include "audio.h"
  28.  
  29. int GUSok=0;
  30.  
  31. int GUS_installed=0;
  32.  
  33. ULTRA_CFG GUS_config;
  34.  
  35. void *vbfr_free;
  36.  
  37. extern int (*init_audio)(void);
  38. extern void (*close_audio)(void);
  39. extern int (*audio_firsttime)(void);
  40. extern int (*audio_everytime)(int wait);
  41.  
  42. extern int  (*get_level)(int channel);
  43. extern void (*set_level)(int channel, int level);
  44. extern int  (*level_incr)(int channel);
  45.  
  46. extern void (*set_input)(enum device_list device);
  47.  
  48. static int GUS_get_params(void)
  49. { char *settings;
  50.   if ((settings = getenv("ULTRASND")) != NULL)
  51.     { sscanf(settings,"%x,%d,%d,%d,%d",&(GUS_config.base_port),
  52.             &(GUS_config.dram_dma_chan),
  53.             &(GUS_config.adc_dma_chan),
  54.             &(GUS_config.gf1_irq_num),
  55.             &(GUS_config.midi_irq_num));
  56.       GUS_installed = 1;
  57.     }
  58.   else
  59.     GUS_installed = 0;
  60.   return GUS_installed;
  61. }
  62.  
  63. static void ultra_input(char far *buffer, long bufsize, unsigned samplerate)
  64. {
  65.     assert( UltraRecordData(buffer,2*sample_stereo,bufsize,0,0) );
  66. }
  67.  
  68. void GUS_set_input(enum device_list device)
  69. {
  70.     UltraEnableOutput();
  71.  
  72.     switch( device )
  73.     {
  74.         case CDInput:        UltraDisableLineIn();     // No controls for CD input
  75.                                 UltraDisableMicIn();
  76.  
  77.                                 break;
  78.  
  79.         case LineInput:    UltraEnableLineIn();
  80.                                 UltraDisableMicIn();
  81.  
  82.                                 break;
  83.  
  84.         case MicInput:        UltraDisableLineIn();
  85.                                 UltraEnableMicIn();
  86.  
  87.                                 break;
  88.     }
  89. }
  90.  
  91. void GUS_close(void)
  92. {
  93. //    _dos_freemem(FP_SEG(voice_buffer));
  94.     free(vbfr_free);
  95.  
  96.     UltraClose();
  97. }
  98.  
  99. int GUS_blank(void)
  100. {
  101.     return 0;
  102. }
  103.  
  104.  
  105.  
  106. int GUS_firsttime(void)
  107. {
  108.     UltraSetRecordFrequency(sample_rate);
  109.     ultra_input(voice_buffer,(long)(2*BUFF_WIDTH+80),sample_rate);
  110.  
  111.     return 0;
  112. }
  113.  
  114.  
  115. int GUS_everytime(int wait)
  116. {
  117.     int x;
  118.     static int prev=0;
  119.     unsigned char far *sbuff;
  120.     int noisy=0, last=0;
  121.     static int firsttime=1;
  122.  
  123.  
  124.     if( sample_rate != actual_rate )
  125.     {
  126.         if( sample_rate < 4000 )
  127.             sample_rate = 4000;
  128.  
  129.  
  130.         if( sample_rate > 44100 )
  131.             sample_rate = 44100;
  132.  
  133.         actual_rate = sample_rate;
  134.  
  135. //        UltraReset(14);
  136.         UltraSetRecordFrequency(sample_rate);
  137.     }
  138.     else
  139.         if( wait )
  140.             while (UltraRecordDmaBusy()) {
  141.                 if (kbhit())
  142.                     break;
  143.             }
  144.         else
  145.             if( UltraRecordDmaBusy() )
  146.                 return 0;
  147.  
  148.     sbuff=voice_buffer ;
  149.     sbuff += 6;
  150.  
  151.     last=(signed char)*sbuff;
  152.     sbuff++;
  153.     for (x=0; x<70; x+=2) {
  154.         //align...
  155.  
  156.         if ((*sbuff)>=prev && last<prev-1) {
  157.             break;
  158.         } else {
  159.             last= *sbuff;
  160.             sbuff+=2;
  161.         }
  162.     }
  163.  
  164.     prev=(signed char)*sbuff;
  165.  
  166.     for (x=0; x<BUFF_WIDTH; x++) {
  167.           stereo[x][0]=(*sbuff++) ^ 128; // convert 2s complement
  168.         stereo[x][1]=(*sbuff++) ^ 128; // to Byte
  169.     }
  170.  
  171.     ultra_input(voice_buffer,(long)(2*BUFF_WIDTH+80),sample_rate);
  172.  
  173.     return 1;
  174. }
  175.  
  176. int GUS_init(void)
  177. {  char *tempBuff;
  178.  
  179.     init_audio=GUS_init;
  180.     close_audio=GUS_close;
  181.     audio_firsttime=GUS_firsttime;
  182.     audio_everytime=GUS_everytime;
  183.  
  184.     get_level = GUS_blank;
  185.     set_level = GUS_blank;
  186.     level_incr = GUS_blank;
  187.  
  188.     set_input = GUS_set_input;
  189.  
  190. //    sample_rate = 44100;
  191. //    sample_stereo = 1;
  192.  
  193.     if (!GUS_get_params()) {
  194.         printf("UltraSound card not found.\n");
  195.         return -1;
  196.     }
  197.     if (UltraProbe(GUS_config.base_port) != NO_ULTRA) {
  198.         if (UltraOpen(&GUS_config,14) != NO_ULTRA) {
  199.             if( tempBuff = malloc(buffer_size+16) ) {
  200.                 FP_SEG(voice_buffer) = FP_SEG(tempBuff) + 1;
  201.                 FP_OFF(voice_buffer) = 0;
  202.  
  203.                 vbfr_free = tempBuff;
  204.  
  205.                 voice_seg=FP_SEG(voice_buffer);
  206.                 switch (device) {
  207.                     case LineInput:
  208.                         UltraEnableLineIn();     // enable LINE
  209.                         break;
  210.                     case MicInput:
  211.                         UltraEnableMicIn();      // enable MIC
  212.                         break;
  213.                 }
  214.                 GUSok=1;
  215.                 return 0;
  216.             } else {
  217.                 printf("Failed to init driver\n");
  218.                 return -2;
  219.             }
  220.         } else {
  221.             return 1;
  222.         }
  223.     } else {
  224.         printf("UltraSound card not found.\n") ;
  225.         return -1;
  226.     }
  227.     return 0;
  228. }
  229.  
  230.